package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

/*
* 封装
* Mysql封装工具类：链接对应数据库
* 1.Mysql与Oracle具备：url,username,password
*   所有数据库公用的定义为属性
* 2.getParam(String 路径)获取参数的方法：链接成功数据库操作
*   2.1外置文件【url，账号，密码】统一配置文件中【形式：键值对】
*      db_mysql.properties 对应 Java Properties 类读取文件键值对
* */
public class Mysql {
    //1.定义数据库私有属性：私有化静态属性  类直接调取属性
    private static String url;
    private static String username;
    private static String password;
    //2.定义一个方法：链接成功数据库 fileName文件路径传入
    public static void getParam(String fileName) throws IOException {
      //2.1读取db_mysql.properties文件--properties类读取文件的键和值
        Properties p=new Properties();
      //2.1[补充2]Properties类提供load()方法：必须传入流--低级流--搬运数据
      //Mysql.class 表示当前Mysql类的class对象
      //理解：图书馆---mysql书籍区域
      //getClassLoader() 获取当前类的加载器【加载器：根据路径执行配置文件】
      //理解：图书馆---mysql书籍区域---找管理员
      //getResourceAsStream() 通过当前类的加载器，找到对应的文件，配合读取
      //理解：图书馆---mysql书籍区域---找管理员---找到对应【db_mysql.properties】书籍
        InputStream fis=
        Mysql.class.getClassLoader().getResourceAsStream(fileName);
      //2.1[补充1]Properties类提供load()方法
        p.load(fis);
      //2.2从db_mysql.properties读取到的键值对信息【url,username用户,password密码】
        //getProperties类提供方法getProperty("键")通过键找值
      //赋值给当前Mysql的数据库基本信息[url,username用户,password密码]
      url=p.getProperty("url");
      username=p.getProperty("username");
      password=p.getProperty("password");
      //2..3打桩 测试是否链接成功
        System.out.println("数据库基本信息："+url+username+password);
    }
    //3.测试工具类--链接成功数据库【外置文件--配置Mysql基本信息】
    public static void main(String[] args) throws IOException, SQLException {
        Mysql.getParam("db_mysql.properties");
        //作业2：参考Mysql工具类--编写Oracle工具类
        //目的：工具类链接成功 不同的数据库 【外置文件基本信息配置不同即可链接到不同数据库】
        //作业3：【增加操作（增加一条数据）--mi库--book】查询
        //JDBC:Connection Statement |       ResultSet
        //1.创建数据库链接操作
        Connection con=
                DriverManager.getConnection(url,username,password);
        //2.执行sql--是否创建成功数据库
    //作业3：查询
        String sql1="select * from book";
        String sql="insert into book values(6,'余华','活着',35,'2023年7月',90,'否')";
        Statement st=con.createStatement();
        //增删改--executeUpdate() 返回成功几条数据
        int rows=st.executeUpdate(sql);
        System.out.println("book表中添加了几条记录"+rows);
        ResultSet rs=st.executeQuery(sql1);
        while(rs.next()){
            int id=rs.getInt("id");
            String author= rs.getString("author");
            String name=rs.getString("name");
            int price=rs.getInt("price");
            String date=rs.getString("date");
            int number=rs.getInt("number");
            String discount=rs.getString("discount");
            System.out.println(name);
        }
        rs.close();
        st.close();
        con.close();
    }
}
